/*
 * Clase.java
 *
 * Created on 7 de noviembre de 2007, 15:26
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package score.utils;

import java.sql.Types;

/**
 *
 * @author vramirez
 */
public class Clase {
    
    private Types esecueleTaip;
    private String nombTabla;
    private String[] parametros;//El nombre de la columna
    private String[] argumentos;//El valor de la columna
    private static Clase clase =null;
    final String PAR_ABRE="(";
    final String PAR_CIERRA=")";
    final String COMA=",";
    final String EQUAL=" = ";
    /** Creates a new instance of Clase */
    private Clase(String tabla, String[] params, String[] args)throws ClaseException {
        this.setNombTabla(tabla);
        this.setParametros(params);
        this.setArgumentos(args);
        if(params.length!=args.length){
            throw new ClaseException();
        }
    }
    
    public String generarInsert(){
        StringBuffer sb=new StringBuffer("INSERT INTO ");
        sb.append(this.nombTabla.toUpperCase());
        sb.append(" ");
        StringBuffer nombres=new StringBuffer();
        StringBuffer valores=new StringBuffer();                
        boolean write=false;//valida q NO genere una coma si el primer campo es nulo
        for(int i=0;i<argumentos.length;i++){
            if(!argumentos[i].equalsIgnoreCase("nUll")){
                if(i>0&&write){
                    nombres.append(COMA);
                    valores.append(COMA);                    
                }
                nombres.append(parametros[i].toUpperCase());
                valores.append(argumentos[i].toUpperCase());
                write=true;
            }
        }
        sb.append(PAR_ABRE);
        sb.append(nombres.toString());
        sb.append(PAR_CIERRA);
        sb.append(" values ");
        sb.append(PAR_ABRE);
        sb.append(valores.toString());
        sb.append(PAR_CIERRA);        
        return sb.toString();
    }
    
    public String generarUpdate(String[] key, String[] keyval){
        String sqlQuery="UPDATE "+this.nombTabla.toUpperCase()+" SET ";
        String nomb_campos="";
        String val_campos="";
        String where = "";
        //final String COMA=" , ";
        
        boolean write=false;//valida q NO genere una coma si el primer campo es nulo
        //Generar el "set tal=talvaina, este=aquel...etc";
        for(int i=0;i<argumentos.length;i++){
            if(!argumentos[i].equalsIgnoreCase("nUll")){
                if(i>0&&write){
                    sqlQuery+=COMA;
                }
                write=true;
                sqlQuery+=parametros[i].toUpperCase()+EQUAL+argumentos[i].toUpperCase();
            }
        }
        //Generar el " WHERE tal=talcosa, otro=aquello...etc";
        where = " WHERE ";
        for(int i=0;i<key.length;i++){
            if(i>0){
                where += " AND ";
            }
            where+=key[i].toUpperCase()+EQUAL+keyval[i].toUpperCase();
        }
        return sqlQuery+where;
    }
    
    public String getNombTabla() {
        return nombTabla;
    }
    
    public void setNombTabla(String nombTabla) {
        this.nombTabla = nombTabla;
    }
    
    public String[] getParametros() {
        return parametros;
    }
    
    public void setParametros(String[] parametros) {
        this.parametros = parametros;
    }
    
    public String[] getArgumentos() {
        return argumentos;
    }
    
    public void setArgumentos(String[] argumentos) {
        this.argumentos = argumentos;
    }
    
    public static Clase getInstance(String nombTabla, String[] params,String[] args)throws ClaseException{
        if(clase==null){
            clase = new Clase(nombTabla,params,args);
        }else{
            clase.setArgumentos(args);
            clase.setNombTabla(nombTabla);
            clase.setParametros(params);
        }
        return clase;
    }
}
